package com.wn.main.ui.system.adapter

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.wn.common.model.SystemSecondList
import com.wn.main.ui.system.view.ArticleListFragment

/**
 * @Author: wn
 * @Date: 2024/10/15 16:54
 * @Description: ViewPage2 的 Adapter
 * 提前创建了所有 Fragment ，并存在 List 中
 * Fragment 的 onViewCreated 在提前创建阶段就执行过了 。后续滑动只是切换 ViewPager2 的显示，
 * 不会重新创建 Fragment ，所以 onViewCreated 不会再触发，请求数据逻辑也就不执行了
 * 解决
 * 不用提前存 Fragment，而是在自定义 Adapter 里 “按需创建”
 * 即 传递 List<Data>
 * 在 createFragment 中 根据 List<Data> 的 position 创建对应的 Fragment
 *
 * 这样的写法 类似于 之前的  匿名内部类 且 相对其来说 还灵活
 */

class SystemViewPageAdapter(
  fragmentManager: FragmentManager,
  lifecycle: Lifecycle,
  private val datas: MutableList<SystemSecondList>,
) : FragmentStateAdapter(fragmentManager, lifecycle) {

  override fun getItemCount(): Int = datas.size

  // FragmentStateAdapter内部自己会管理已实例化的 fragment 对象，所以不需要考虑复用的问题
  override fun createFragment(position: Int): Fragment =
    ArticleListFragment.newInstance(datas[position].id ?: 0)
}